package com.atguigu.lease.web.admin.custom.converter;

import com.atguigu.lease.model.enums.BaseEnum;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.stereotype.Component;

/**
 * 雒鑫
 */
//该方法实现的是从string类型到目标类型子类的所有的类型转换器
@Component
public class StringToBaseEnumConverterFactory implements ConverterFactory<String, BaseEnum> {
    @Override
    public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {
        //该方法的最终返回值是一个Converter对象的类型转换器
        return new Converter<String, T>() {
            @Override
            public T convert(String code) {
                //1.获取目标枚举对象的所有实例数组
                T[] enumConstants = targetType.getEnumConstants();
                //2.遍历当前数组找到code与其实例对象的code相同的实例对象并返回
                for (T enumConstant : enumConstants) {
                    if (enumConstant.getCode().equals(Integer.valueOf(code))){
                        return enumConstant;
                    }
                }
                //如果没有找到就抛出异常
                throw  new IllegalArgumentException("code"+code+"非法");
            }
        };
    }
}
